#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""配置管理器模块
负责管理自动升级相关的配置信息"""

import os
import json
from utils import Logger, FileUtils

class UpdateConfigManager:
    """更新配置管理器
    负责管理自动升级系统的配置信息"""
    
    def __init__(self):
        """初始化配置管理器"""
        self.config_file = self._get_config_file_path()
        self.config = self._load_config()
        Logger.log_info(f"更新配置管理器初始化完成，配置文件: {self.config_file}")
    
    def _get_config_file_path(self):
        """获取配置文件路径
        
        Returns:
            str: 配置文件路径
        """
        # 确定配置文件的位置
        app_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
        config_dir = os.path.join(app_dir, "config")
        return os.path.join(config_dir, "update_config.json")
    
    def _load_config(self):
        """加载配置文件
        
        Returns:
            dict: 配置数据
        """
        # 检查配置文件是否存在
        if FileUtils.file_exists(self.config_file):
            try:
                config_data = FileUtils.read_json(self.config_file)
                if config_data:
                    Logger.log_info(f"成功加载更新配置: {self.config_file}")
                    return config_data
                else:
                    Logger.log_warning("配置文件为空，使用默认配置")
            except Exception as e:
                Logger.log_error(f"加载配置文件失败: {str(e)}")
        else:
            Logger.log_warning(f"配置文件不存在: {self.config_file}")
        
        # 返回默认配置
        default_config = self._get_default_config()
        # 保存默认配置到文件
        self._save_config(default_config)
        return default_config
    
    def _get_default_config(self):
        """获取默认配置
        
        Returns:
            dict: 默认配置
        """
        # 获取应用程序路径
        app_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
        
        return {
            "update_server_url": "https://updates.professionalstockanalysis.com/version.json",
            "auto_update_enabled": False,  # 禁用自动更新，因为当前模拟环境无法提供有效的更新包
            "check_interval": 3600,  # 1小时
            "download_timeout": 300,  # 5分钟
            "update_during_startup": False,  # 禁用启动时检查更新
            "prompt_before_install": True,
            "download_dir": "",  # 默认为系统临时目录
            "keep_downloads": False,
            "last_update_check": "",
            "last_installed_version": "",
            "update_history": [],
            # 静默更新配置
            "silent_update_enabled": False,
            "silent_update_time_window": [22, 6],  # 静默更新时间窗口: 22:00-06:00
            "silent_update_system_load_threshold": 75,  # 系统负载阈值(%)
            "silent_update_check_interval": 14400,  # 静默更新检查间隔: 4小时
            # 差分更新配置
            "delta_update_enabled": False,  # 禁用差分更新
            "delta_block_size": 4096,  # 差分更新块大小
            "delta_temp_dir": "",  # 默认为系统临时目录
            "application_path": app_dir  # 应用程序路径
        }
    
    def _save_config(self, config_data):
        """保存配置到文件
        
        Args:
            config_data: 要保存的配置数据
            
        Returns:
            bool: 是否保存成功
        """
        try:
            result = FileUtils.write_json(self.config_file, config_data)
            if result:
                Logger.log_info(f"成功保存更新配置: {self.config_file}")
            return result
        except Exception as e:
            Logger.log_error(f"保存配置文件失败: {str(e)}")
            return False
    
    def get_config(self, key, default=None):
        """获取指定配置项的值
        
        Args:
            key: 配置项的键
            default: 默认值，如果配置项不存在则返回
            
        Returns:
            配置项的值或默认值
        """
        return self.config.get(key, default)
    
    def set_config(self, key, value):
        """设置配置项的值
        
        Args:
            key: 配置项的键
            value: 配置项的值
            
        Returns:
            bool: 是否设置成功
        """
        self.config[key] = value
        return self._save_config(self.config)
    
    def update_config(self, config_updates):
        """批量更新配置项
        
        Args:
            config_updates: 包含配置项更新的字典
            
        Returns:
            bool: 是否更新成功
        """
        self.config.update(config_updates)
        return self._save_config(self.config)
    
    def reset_config(self):
        """重置配置为默认值
        
        Returns:
            bool: 是否重置成功
        """
        self.config = self._get_default_config()
        return self._save_config(self.config)

# 示例用法
if __name__ == "__main__":
    config_manager = UpdateConfigManager()
    
    # 获取配置
    auto_update_enabled = config_manager.get_config("auto_update_enabled")
    check_interval = config_manager.get_config("check_interval")
    
    print(f"自动更新已启用: {auto_update_enabled}")
    print(f"检查间隔: {check_interval}秒")
    
    # 设置配置
    config_manager.set_config("check_interval", 7200)  # 改为2小时
    new_interval = config_manager.get_config("check_interval")
    print(f"新的检查间隔: {new_interval}秒")